Scheduling techniques are used to schedule computer jobs in a computing environment so that the resources of the environment are efficiently utilized. Traditionally, resource bookkeeping is buried at the lowest levels of the job scheduling logic, making it difficult and time consuming to extend existing job scheduling algorithms with novel paradigms, such as backfill and preemption. Resource bookkeeping is the tracking of used, free, bad, and to-be-used resources in the job scheduling algorithm With current job scheduling algorithms, which allow a large variety of scheduling options, such as scheduling by hostlist, blocking, packing, etc., trying to extend the existing algorithms to support new, moderately complex scheduling paradigms, and at the same time maintain correctness of the current options, often requires substantial structural modifications to most of the underlying options. Typically, most of the currently supported scheduling options must also be supported by the new paradigms. As a result, introduction of new paradigms has a substantial impact on the existing code base. Development and testing cycles along with product quality are thus greatly effected.